package com.zjsru.oneDay202203;

/**
 * @Author: likew
 * @Date: 2022/3/4
 *
 *  子数组范围和
 * 输入：nums = [1,2,3] 输出：4 解释：nums 的 6 个子数组如下所示：
 * [1]，范围 = 最大 - 最小 = 1 - 1 = 0
 * [2]，范围 = 2 - 2 = 0
 * [3]，范围 = 3 - 3 = 0
 * [1,2]，范围 = 2 - 1 = 1
 * [2,3]，范围 = 3 - 2 = 1
 * [1,2,3]，范围 = 3 - 1 = 2
 * 所有范围的和是 0 + 0 + 0 + 1 + 1 + 2 = 4
 */
public class subArrayRanges {
    
    public long subArrayRanges(int[] nums) {
        int len = nums.length;
        long n = 0; //需要定义为long，防止测试中出现极端数组
        for (int i = 0; i < len; i++) {
            int Max = Integer.MIN_VALUE, Min = Integer.MAX_VALUE;
            for (int j = i; j < len; j++) {
                Max = Math.max(Max, nums[j]);
                Min = Math.min(Min, nums[j]);
                n += Max - Min;
            }
        }
        return n;
    }
    
    /*
     * 自己写的版本 ，只能判断正数组
     * */
//    public long subArrayRanges(int[] nums) {
//        int len = nums.length;
//        long n = 0; //需要定义为long，防止测试中出现极端数组
//        for (int i = 0; i < len; i++) {
//            for (int j = i+1; j < len; j++) {
//                n += nums[j] - nums[i];
//            }
//        }
//        return n;
//    }
    
    public static void main(String[] args) {
        subArrayRanges subArrayRanges = new subArrayRanges();
        int[] nums = new int[] {4, -2, -3, 4, 1};
        System.out.println(subArrayRanges.subArrayRanges(nums));
    }
    
}
